package com.idroc.message;

import org.apache.mina.common.IoSession;


/**
 * 消息处理器
 * @author 赤脚詹(yuyoo4j@163.com)
 * @date Aug 17, 2009 4:11:13 PM 
 * @memo:
 */
public interface MessageHandler {
	
	/**
	 *发生注册消息处理器事件
	 * @param service -- 绑定到的MessageService对象
	 * <p>
	 * 说明:<br>当MessageHandler对象注册到一个MessageService对象时发生调用.
	 *     <br>ext. MessageService.registerMsgHandler().
	 *     <br>当在MessageService注册成功MessageHandler后调用.
	 * </p>
	 */
	void onAttached(MessageService service);
	
	/**
	 * 发生注销消息处理器事件
	 * @param service -- 绑定到的MessageService对象
	 * <p>
	 * 说明:<br>当MessageHandler对象从一个MessageService对象注销时发生调用.
	 * 	   <br>ext. MessageService.unregisterMsgHandler().
	 *     <br>当在MessageService注销成功MessageHandler后调用.
	 * </p>
	 */
	void onReleased(MessageService service);

	/**
	 * 发生消息到达事件
	 * @param session -- 当前传达消息的回话
	 * @param message -- 到达的消息 
	 * <p>
	 * 说明:<br> 当消息处理器注册关注某种消息,当此类消息到达消息服务器,
	 *     <br> 消息服务器就会发生一个消息处理器的消息到达事件.
	 * </p>
	 */
	void onMsgReceived(IoSession session, Message message);
	
	/**
	 * 发生消息发送事件
	 * @param session -- 当前传达消息的回话
	 * @param message -- 将要发送的消息 
	 * <p>
	 * 说明:<br> 当一个消息通过消息服务器发送出去,如果存在此消息的消息处理器,
	 *     <br> 消息服务器会发生一个消息处理器的消息发送事件.
	 * </p>
	 */
	void onMsgSent(IoSession session, Message message);
	
	/**
	 * 发送消息被消息服务内部投递事件
	 * @param session -- 当前传达消息的回话
	 * @param message -- 被投递的消息
	 */
	void onMsgCast(IoSession session, Message message);
	 
}
